// common模块： com.atguigu.lease.common.config
package com.atguigu.lease.common.config;

import com.atguigu.lease.common.handler.StgyAdminAuthInterceptor;
import com.atguigu.lease.common.handler.StgyAppAuthInterceptor;
import com.atguigu.lease.common.handler.StringToBaseTypeEnumConverterFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/*
    WebMvcConfigurer:
        mvc的配置类
        - 可以注册拦截器： Interceptor
        - 可以配置跨域：
        - 可以注册视图解析器
        - 可以 todo 注册消息转换器：

 */
@Configuration
public class StgyWebMvcConfig implements WebMvcConfigurer {
    @Autowired
    StringToBaseTypeEnumConverterFactory stringToBaseTypeEnumConverterFactory;

    @Autowired
    StgyAdminAuthInterceptor stgyAdminAuthInterceptor;

    @Override
    public void addFormatters(FormatterRegistry registry) {
        //注册消息转换器
        registry.addConverterFactory(stringToBaseTypeEnumConverterFactory);
    }


    @Autowired
    StgyAppAuthInterceptor stgyAppAuthInterceptor;

    //注册拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(stgyAdminAuthInterceptor)
                .addPathPatterns("/admin/**")//配置要拦截的路径 支持ant风格的url地址
                .excludePathPatterns("/admin/login/**", "/doc.html") //配置要排除的 不拦截的路径
        ;

        registry.addInterceptor(stgyAppAuthInterceptor)
                .addPathPatterns("/app/**")
                .excludePathPatterns("/app/login/**");

    }

    //全局跨域配置
    @Override
    public void addCorsMappings(CorsRegistry registry) {
    /*
        允许所有的客户端 所有请求方式跨域访问接口
        */
        registry.addMapping("/**") //允许哪些资源被访问时 使用当前的跨域配置
                //.allowedOrigins("*") 不能使用  会报错！
                .allowedOriginPatterns("*") //允许哪些客户端来跨域访问  * 统配所有， 以后也可以在allowedOrigins中配置 http://192.168.123.1 指定具体的允许的服务器
                .allowedHeaders("*") //允许客户端携带的请求头
                .allowCredentials(true) //是否允许客户端携带cookie
                .maxAge(3600) //客户端可以跨域访问的一次授权的有效时间
                .allowedMethods("*");//允许客户端跨域访问的请求方式
    }
}